package business.coding;

public class WordWeight {
	private int _source;
	private double _per;
	private double _impForLoc;
	public int get_context() {
		return _source;
	}
	public void set_context(int _context) {
		this._source = _context;
	}
	public double get_per() {
		return _per;
	}
	public void set_per(double _per) {
		this._per = _per;
	}
	public double get_impForLoc() {
		return _impForLoc;
	}
	public void set_impForLoc(double _impForLoc) {
		this._impForLoc = _impForLoc;
	}
	public WordWeight(int _context, double _per, Double _impForLoc) {
		super();
		if (_impForLoc == null) _impForLoc = 0.0;
		this._source = _context;
		this._per = _per;
		this._impForLoc = _impForLoc;
	}
	@Override
	public String toString() {
		return "[" + WeightType.getWeightName(_source) + "-" + (int)_per + "-"
				+ validateImpForLoc(_impForLoc) + "]";
	}
	
	private String validateImpForLoc(double impFL) {
		
		if (impFL > 60) return "K";
		else return "";
		
	}
	/**
	 * El peso de la palabra se calcula ponderando el per con un valor dado para el origen y si es clave o no.
	 * 
	 * impForLoc nos indica segun un umbral si la palabra es clave o no.
	 * source junto al valor de si es clave o no, nos da el tipo de ponderacion que hay que hacer
	 * 
	 * @return devuelve el per multiplicado por la ponderacion hecha con impForLoc y source
	 */
	public double getWeight() {
		double peso = 0;
		
		switch (_source) {
		case WeightType.word: peso = 1; break;
		case WeightType.word2: peso = 1; break;
		case WeightType.word3: peso = 1; break;
		case WeightType.group: peso = 2; break;
		case WeightType.group2: peso = 2; break;
		case WeightType.wordGroup: peso = 2; break;
		case WeightType.wordKeyUpper: peso = 2; break;
		}
		
		if (_impForLoc > 60) peso++;
		
		//Las palabras pueden llegar a valer como tres (palabra de source group y clave, por ejemplo, vale 3)
		//Osea, el per pierde valor si la palabra no es clave y se obtiene de una fuente de valor (group, mayuscula, etc)
		return peso*_per/3;
	}
	
	
}
